﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Diagnostics;
using Microsoft.Win32;
using System.Security.Permissions;




namespace RegistryHandler
{
    class RegistryManager
    {
        public void CreateEntireRegistry()
        {
            //Microsoft.Win32.RegistryKey key = Microsoft.Win32.Registry.CurrentUser.OpenSubKey("SOFTWARE", true);

            //Public ReadOnly Property LocalMachine As Microsoft.Win32.RegistryKey
            // Create a new key under HKEY_LOCAL_MACHINE\Software as MCBInc
            Microsoft.Win32.RegistryKey key = Registry.CurrentUser.OpenSubKey(@"SOFTWARE\\Dezire", true);


            // Add one more sub key
            RegistryKey newkey = key.CreateSubKey("Dezire");

            if (key == null)
            {
                MessageBox.Show("Key does not exist hence will  be created");
                key = Microsoft.Win32.Registry.CurrentUser.CreateSubKey("SOFTWARE\\Dezire");
            }
            else
            {
                MessageBox.Show("Already Key Exits");

            }
      
            //L for Loading Rack 1 to 20 Position
            key.SetValue("1", "L1");
            key.SetValue("2", "L2");
            key.SetValue("3", "L3");
            key.SetValue("4", "L4");
            key.SetValue("5", "L5");
            key.SetValue("6", "L6");
            key.SetValue("7", "L7");
            key.SetValue("8", "L8");
            key.SetValue("9", "L9");
            key.SetValue("10", "L10");
            key.SetValue("11", "L11");
            key.SetValue("12", "L12");
            key.SetValue("13", "L13");
            key.SetValue("14", "L14");
            key.SetValue("15", "L15");
            key.SetValue("16", "L16");
            key.SetValue("17", "L17");
            key.SetValue("18", "L18");
            key.SetValue("19", "L19");
            key.SetValue("20", "L20");

            //C For Cooker 21 to 60 Position for Cooker
            key.SetValue("21", "C21");
            key.SetValue("22", "C22");
            key.SetValue("23", "C23");
            key.SetValue("24", "C24");
            key.SetValue("25", "C25");
            key.SetValue("26", "C26");
            key.SetValue("27", "C27");
            key.SetValue("28", "C28");
            key.SetValue("29", "C29");
            key.SetValue("30", "C30");
            key.SetValue("31", "C31");
            key.SetValue("32", "C32");
            key.SetValue("33", "C33");
            key.SetValue("34", "C34");
            key.SetValue("35", "C35");
            key.SetValue("36", "C36");
            key.SetValue("37", "C37");
            key.SetValue("38", "C38");
            key.SetValue("39", "C39");
            key.SetValue("40", "C40");
            key.SetValue("41", "C41");
            key.SetValue("42", "C42");
            key.SetValue("43", "C43");
            key.SetValue("44", "C44");
            key.SetValue("45", "C45");
            key.SetValue("46", "C46");
            key.SetValue("47", "C47");
            key.SetValue("48", "C48");
            key.SetValue("49", "C49");
            key.SetValue("50", "C50");
            key.SetValue("51", "C51");
            key.SetValue("52", "C52");
            key.SetValue("53", "C53");
            key.SetValue("54", "C54");
            key.SetValue("55", "C55");
            key.SetValue("56", "C56");
            key.SetValue("57", "C57");
            key.SetValue("58", "C58");
            key.SetValue("59", "C59");
            key.SetValue("60", "C60");

            
            //B for Buffer area
            key.SetValue("61", "B61");
            key.SetValue("62", "B62");
            key.SetValue("63", "B63");
            key.SetValue("64", "B64");
            key.SetValue("65", "B65");
            key.SetValue("66", "B66");
            key.SetValue("67", "B67");
            key.SetValue("68", "B68");
            key.SetValue("69", "B69");
            key.SetValue("70", "B70");
            key.SetValue("71", "B71");
            key.SetValue("72", "B72");
            key.SetValue("73", "B73");
            key.SetValue("74", "B74");
            key.SetValue("75", "B75");
            key.SetValue("76", "B76");
            key.SetValue("77", "B77");
            key.SetValue("78", "B78");
            key.SetValue("79", "B79");
            key.SetValue("80", "B80");

            //P for Primary reagent
            key.SetValue("81", "P81");
            key.SetValue("82", "P82");
            key.SetValue("83", "P83");
            key.SetValue("84", "P84");
            key.SetValue("85", "P85");
            key.SetValue("86", "P86");
            key.SetValue("87", "P87");
            key.SetValue("88", "P88");
            key.SetValue("89", "P89");
            key.SetValue("90", "P90");

            key.SetValue("91", "P91");
            key.SetValue("92", "P92");
            key.SetValue("93", "P93");
            key.SetValue("94", "P94");
            key.SetValue("95", "P95");
            key.SetValue("96", "P96");
            key.SetValue("97", "P97");
            key.SetValue("98", "P98");
            key.SetValue("99", "P99");
            key.SetValue("100", "P100");

            //S Secondary Reagent
            key.SetValue("101", "S101");
            key.SetValue("102", "S102");
            key.SetValue("103", "S103");
            key.SetValue("104", "S104");
            key.SetValue("105", "S105");
            key.SetValue("106", "S106");
            key.SetValue("107", "S107");
            key.SetValue("108", "S108");
            key.SetValue("109", "S109");
            key.SetValue("110", "S110");

            key.SetValue("111", "S111");
            key.SetValue("112", "S112");
            key.SetValue("113", "S113");
            key.SetValue("114", "S114");
            key.SetValue("115", "S115");
            key.SetValue("116", "S116");
            key.SetValue("117", "S117");
            key.SetValue("118", "S118");
            key.SetValue("119", "S119");
            key.SetValue("120", "S120");                
            key.SetValue("121", "S121");
            key.SetValue("122", "S122");
            key.SetValue("123", "S123");
            key.SetValue("124", "S124");
            key.SetValue("125", "S125");
            key.SetValue("126", "S126");
            key.SetValue("127", "S127");
            key.SetValue("128", "S128");

            //W for wash
            key.SetValue("129", "W129");
            key.SetValue("130", "W130");
            key.SetValue("131", "W131");
            key.SetValue("132", "W132");
            key.SetValue("133", "W133");
            key.SetValue("134", "W134");
            key.SetValue("135", "W135");
            key.SetValue("136", "W136");
            key.SetValue("137", "W137");
            key.SetValue("138", "W138");
            key.SetValue("139", "W139");
            key.SetValue("140", "W140");

            //D for DIwash
            key.SetValue("141", "W141");
            key.SetValue("142", "W142");
            key.SetValue("143", "W143");
            key.SetValue("144", "W144");

            //U unloading Rack
            key.SetValue("145", "U145");
            key.SetValue("146", "U146");
            key.SetValue("147", "U147");
            key.SetValue("148", "U148");
            key.SetValue("149", "U149");
            key.SetValue("150", "U150");
            key.SetValue("151", "U151");
            key.SetValue("152", "U152");
            key.SetValue("153", "U153");
            key.SetValue("154", "U154");
            key.SetValue("155", "U155");
            key.SetValue("156", "U156");
            key.SetValue("157", "U157");
            key.SetValue("158", "U158");
            key.SetValue("159", "U159");
            key.SetValue("160", "U160");
            key.SetValue("161", "U161");
            key.SetValue("162", "U162");
            key.SetValue("163", "U163");
            key.SetValue("164", "U164");
            key.SetValue("165", "U165");
            key.SetValue("166", "U166");
            key.SetValue("167", "U167");
            key.SetValue("168", "U168");
            key.SetValue("169", "U169");
            key.SetValue("170", "U170");
            key.SetValue("171", "U171");
            key.SetValue("172", "U172");
            key.SetValue("173", "U173");
            key.SetValue("174", "U174");
            key.SetValue("175", "U175");
            key.SetValue("176", "U176");
            key.SetValue("177", "U177");
            key.SetValue("178", "U178");
            key.SetValue("179", "U179");
            key.SetValue("180", "U180");
            key.SetValue("181", "U181");
            key.SetValue("182", "U182");
            key.SetValue("183", "U183");
            key.SetValue("184", "U184");
        


          
            key.Close();
        }

        public void UploadRegistry()
        {
            Microsoft.Win32.OpenFileDialog openFileDialog1 = new Microsoft.Win32.OpenFileDialog();

            openFileDialog1.InitialDirectory = "c:\\";
            openFileDialog1.Filter = "reg files (*.reg)|*.reg";
            openFileDialog1.FilterIndex = 2;
            openFileDialog1.RestoreDirectory = true;
            //if (openFileDialog1.ShowDialog() == DialogResult.OK)
            //   if (openFileDialog1.ShowDialog =DialogResult.OK)
            //{
            //    Process regeditProcess = Process.Start("regedit.exe", "/s \"" + openFileDialog1.FileName + "\"");
            //    regeditProcess.WaitForExit();
            //}

        }

        public void DownloadRegistry(String key)
        {
            FolderBrowserDialog fm = new FolderBrowserDialog();
            String path = "";
            if (DialogResult.OK == fm.ShowDialog())
            {
                path = fm.SelectedPath;
            }
            path  += "\\AutoReg.reg";

            string Path = "\"" + path + "\"";
            string Key = "\"" + key + "\"";
            Process proc = new Process();

            try
            {
                proc.StartInfo.FileName = "regedit.exe";
                proc.StartInfo.UseShellExecute = false;

                proc = Process.Start("regedit.exe", "/e " + Path + " " + Key);
                proc.WaitForExit();
            }
            catch (Exception)
            {
                proc.Dispose();
            }
        }

        public String GetRegistryValue(String KeyName)
        {
            String strValue = "";
            String level = "";
            String finalkey = "";

            while (KeyName.IndexOf('\\') != -1)
            {
                int i = KeyName.IndexOf('\\');
                level += KeyName.Substring(0, i);
                level += "\\";
                KeyName = KeyName.Substring(i + 1, KeyName.Length - i - 1);               
            }
            finalkey = KeyName;
            Microsoft.Win32.RegistryKey key = Microsoft.Win32.Registry.CurrentUser.OpenSubKey("SOFTWARE\\Dezire" + level);
            strValue = (String)key.GetValue(finalkey);
            return strValue;
        }

        public void SetRegistryValue(string KeyName,String KeyValue)
        {
            String strValue = "";
            String level = "";
            String finalkey = "";

            while (KeyName.IndexOf('\\') != -1)
            {
                int i = KeyName.IndexOf('\\');
                level += KeyName.Substring(0, i);
                level += "\\";
                KeyName = KeyName.Substring(i + 1, KeyName.Length - i - 1);
            }
            finalkey = KeyName;
            Microsoft.Win32.RegistryKey key = Microsoft.Win32.Registry.CurrentUser.OpenSubKey("SOFTWARE\\Dezire" + level, true);
            if (key == null)
            {
                key = Microsoft.Win32.Registry.CurrentUser.CreateSubKey("SOFTWARE\\Dezire" + level);
            }
            key.SetValue(finalkey, KeyValue);
             
        }

        public void CreateRegistryFolder(String FolderName)
        {
            Microsoft.Win32.RegistryKey key = Microsoft.Win32.Registry.CurrentUser.OpenSubKey("SOFTWARE\\Dezire" + FolderName, true);
            if (key == null)
            {
                key = Microsoft.Win32.Registry.CurrentUser.CreateSubKey("SOFTWARE\\Dezire" + FolderName);
            }
        }
    }
}
